<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // document.body.addEventListener('click',function(){
        //     alert(1)
        // })
        // document.body.click() //执行alert(1)
        // document.body.addEventListener('click',function(){
        //     alert(1)
        // })
        // document.body.addEventListener('click',function(){
        //     alert(2)
        // })
        // document.body.click() //先执行alert(1) alert(2)

        //定义售楼处卖房子的例子  简版的
        // var salesOffices = {}; // 定义售楼处
        // salesOffices.clientList = []; // 缓存列表，存放订阅者的回调函数
        // salesOffices.listen = function(fn){ //增加订阅者
        //     this.clientList.push(fn); //订阅的消息添加进缓存列表
        // }

        // salesOffices.trigger = function(){ //发布消息
        //     for(var i=0,fn; fn = this.clientList[i++];){
        //         fn.apply(this,arguments) //(2) //arguments 是发布消息时带上的参数
        //     }
        // }

        // //下面我们来进行一些简单的测试
        // salesOffices.listen( function(price,squareMeter){ //小明订阅的价格
        //     console.log("小明订阅的消息")
        //     console.log('价格= '+price);
        //     console.log('squareMeter=' +squareMeter)
        // })

        // salesOffices.listen( function(price,squareMeter){ //小红订阅的价格
        //     console.log("小红订阅的消息")
        //     console.log('价格= '+price);
        //     console.log('squareMeter=' +squareMeter)
        // })
        // salesOffices.trigger(2000000,88);
        // salesOffices.trigger(3000000,110)

        //所以我们有必要增加一个标示 key，
        //让订阅者只订阅自己感兴趣的消息。改写后的代码如下：
            var salesOffices = {}; //定义售楼部

            salesOffices.clientList = {}; //缓存列表，存放订阅者的回调函数

            salesOffices.listen = function(key,fn){
                if(!this.clientList[key]){ //如果还没有订阅过此类消息，给该类消息创建一个缓存列表
                    this.clientList[key] =[]
                }
                this.clientList[key].push(fn); //订阅消息添加进消息缓存列表
            };

            salesOffices.trigger = function(){
                var key = Array.prototype.shift.call(arguments), //取出消息类型
                    fns = this.clientList[key]; //取出该消息对应的回调函数集合
                if(!fns || fns.length === 0){ //如果没有订阅该消息，则返回
                    return false
                }
                for( var i=0,fn; fn = fns[i++];){
                    fn.apply(this,arguments);  //(2) //arguments是发布消息时附送的参数
                }
            };

            salesOffices.listen('squareMeter88',function(price){
                console.log('小明需要的88平米的')
                console.log('价格='+price); //输出：200000
            })
            salesOffices.listen('squareMeter110',function(price){
                console.log('小红需要的110平米的')
                console.log('价格='+price)
            })
            salesOffices.trigger('squareMeter88',200000)
            salesOffices.trigger('squareMeter110',30000000)


    </script>
</body>
</html>